package modelo.persistencia.JDBC;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import modelo.entidades.Usuario;
import modelo.entidades.UsuarioImp;
import modelo.persistencia.UsuarioDAO;

/**
 *
 * @author ajb
 */
public class UsuarioDAOJDBC implements UsuarioDAO {

    @Override
    public Usuario read(String pk) throws SQLException, Exception {
        Usuario usuario = null;
        String sql = "select * from usuarios where usuario = ?";
        try {
            PreparedStatement stmt = Persistencia.createConnection().prepareCall(sql);
            stmt.setString(1,pk);
            ResultSet res = stmt.executeQuery();
            if (res.next()) {
                String nombre = res.getString("usuario");
                String contrasena = res.getString("contraseña");
                String tipo = res.getString("tipo");
                usuario = new UsuarioImp(nombre);
                usuario.setContrasena(contrasena);
                usuario.setTipo(tipo);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return usuario;
    }

    @Override
    public Usuario read(Usuario entidad) throws SQLException, Exception {
        throw new UnsupportedOperationException("No implementado");
    }
    
    @Override
    public void create(Usuario usuario) throws SQLException, Exception {
        String sql = "insert into usuarios(usuario, contraseña, tipo) values (?,?,?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, usuario.getNombre());
            stm.setString(2, usuario.getContrasena());
            stm.setString(3, usuario.getTipo());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void update(Usuario usuario) throws SQLException, Exception {
        String sql = "update usuarios set usuario=?, contraseña=?, tipo=? where usuario like ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, usuario.getNombre());
            stm.setString(2, usuario.getContrasena());
            stm.setString(3, usuario.getTipo());
            stm.setString(4, usuario.getNombre());
            stm.executeUpdate();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void delete(Usuario Usuario) throws SQLException, Exception {
        String sql = "delete from usuarios where usuario = ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, Usuario.getNombre());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public List<Usuario> list() throws SQLException, Exception {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("select * from usuarios");
            while (res.next()) {
                String nombre = res.getString("usuario");
                String contrasena = res.getString("contraseña");
                String tipo = res.getString("tipo");
                Usuario usuario = new UsuarioImp(nombre);
                usuario.setContrasena(contrasena);
                usuario.setTipo(tipo);
                usuarios.add(usuario);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return usuarios;
    }

}
